; problema jucatori de fotbal
; culoarea pant - constrangere
; slot = atribute
;deftemplate ~ create table din oracle

(deftemplate culoarePantaloni (slot persoana) (slot culoare))
(deftemplate pozitie (slot  persoana) (slot x))

(foreach ?nume (create$ Fred Joe Bob Tom)
   (foreach ?i (create$ 1 2 3 4)
       (assert (pozitie (persoana ?nume)(x ?i)))
    )
)

(foreach ?nume (create$ Fred Joe Bob Tom)
   (foreach ?culoare (create$ Rosu Albastru Verde Oranj)
       (assert (culoarePantaloni (persoana ?nume)(culoare ?culoare)))
   )
)

(defrule rezolvare
	(pozitie (persoana Fred)(x ?p1))
	(culoarePantaloni (persoana Fred)(culoare ?c1))
	    
	(pozitie (persoana ?n & ~Fred)(x ?p & : (eq ?p (+ ?p1 1))))
	(culoarePantaloni (persoana ?n & ~Fred)(culoare Albastru & ~?c1))
	    
	(pozitie (persoana Joe)(x ?p2 & 2 & ~?p1))
	(culoarePantaloni (persoana Joe)(culoare ?c2 & ~?c1))
	    
	(pozitie (persoana Bob & ~?n)(x ?p3 & ~?p1 & ~?p & ~?p2 ))
	(culoarePantaloni (persoana Bob & ~?n)(culoare ?c3 & Verde & ~?c1 & ~?c2))
	    
	(pozitie (persoana Tom & ?n)(x ?p4 & ~1 & ~4 & ~?p1 & ~?p2 & ~?p3))
	(culoarePantaloni (persoana Tom)(culoare ?c4 & ~Oranj & ~?c1 & ~?c2 & ~?c3))
	=>
	(printout t "Fred pozitie = " ?p1 " culoare= " ?c1 crlf)
	(printout t "Joe pozitie = " ?p2 " culoare= " ?c2 crlf)
	(printout t "Bob pozitie = " ?p3 " culoare= " ?c3 crlf)
	(printout t "Tom pozitie = " ?p4 " culoare= " ?c4 crlf crlf)
)
(run)